也可以稱為列舉,枚舉是Java中的一種特殊數據類型,它代表了一個固定數量的命名常數。枚舉常數在聲明時列舉出並具有唯一的名稱,定義在該型別裡的值是固定不能變動的,只能是列舉出來的幾種,不可以是其他未列出的值。
定義常數集合-物件有限且固定,例如:一週有七天,一年四個季節
提高代碼的可讀性,使代碼更具表達力。
在switch語句中使用,以簡化多分支邏輯。
注意事項:
以下以季節當作例子:
以前
public class OldSeason {
public static final int SPRING = 1;
public static final int SUMMER = 2;
public static final int FALL = 3;
public static final int WINTER = 4;
}
用enum表示:
enum Season {
//第一行宣告物件:強制加上public static final
SPRING, SUMMER, FALL, WINTER;
//背後會做的事
//Season SPRING = new Season();
//Season SUMMER = new Season();
//Season FALL = new Season();
//Season WINTER = new Season();
String weather;
void info(){
System.out.println(weather);
}
//權限不可是public 預設是private
Season() {
System.out.println("OK");
}
}
public static void main(String[] args) {
//直接使用其物件
System.out.println(Season.SPRING.weather);
}
/*
輸出結果:
OK
OK
OK
OK
null
*/
以上會產生這麼多7個OK是因為預設會先像Season SPRING = new Season();把物件建立起來,就會預先跑建構子
如果遇到Enum名稱較長的狀況可以用間接使用的方法
public static void main(String[] args) {
//直接使用其物件
System.out.println(Season.SPRING.weather);
//間接以代號使用
Season s1 = Season.SPRING;
System.out.println(s1.weather);
}
/*
輸出結果:
OK
OK
OK
OK
null
null
*/
如果要初始化weather的話可以透過給建構子參數的方式,如以下:
enum Season {
//第一行宣告物件:強制加上public static final
SPRING("春天"), SUMMER("夏天"), FALL("秋天"), WINTER("冬天");
//背後會做的事
//Day SUNDAY = new Day();
//Day MONDAY = new Day();
//Day TUESDAY = new Day();
//Day SATURDAY = new Day();
String weather;
void info(){
System.out.println(weather);
}
Season(String w) {
this.weather = w;
System.out.println("OK");
}
}
public static void main(String[] args) {
//直接使用其物件
System.out.println(Season.SPRING.weather);
//間接以代號使用
Season s1 = Season.SPRING;
System.out.println(s1.weather);
}
/*
輸出結果:
OK
OK
OK
OK
春天
春天
*/
//不存在的會報錯 IllegalArgumentException
System.out.println(Season.valueOf("FALL"));
/*
輸出結果:
FALL
*/
搭配前面提到流程控制的switch條件句,判斷枚舉資料
public static void main(String[] args) {
Season s1 = Season.SPRING;
switch(s1){
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case FALL:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
/*
輸出結果:
春天
*/
枚舉是Java中一個強大且有用的特性,用於表示一組相關的常數值。它們提高了代碼的可讀性、類型安全性和維護性,特別適用於表示有限的選項或狀態的情況。當您需要定義一組常數值時,應該考慮使用枚舉,因為它們可以幫助改善代碼的質量並減少潛在的錯誤。